今天來介紹一下要如何管理一個 Rust 專案,因為在開發大型專案時,如何組織程式碼是很重要的。
Rust 有一系列的功能能讓你管理你的程式碼組織,包含哪些細節能對外提供、哪些細節是私有的,以及程式中每個作用域的名稱為何,包含:Package, Crates, Modules.
Crate 是 Rust 最小的編譯單位,每個 crate 會產生一個 .rlib(library)或執行檔。
通常一個 package 最多含有:
模組的目標是提高程式碼的可讀性與可維護性。
從零建立一個大型 Rust 專案的步驟:
cargo new my_project
cd my_project
這會建立:
my_project/
├── Cargo.toml ← 定義 package 名稱、版本、依賴等
└── src/
└── main.rs ← 預設的 binary crate 入口點
如果專案越來越大,建議拆出一個 library crate:
src/
├── main.rs ← binary crate:負責 I/O、CLI 等
└── lib.rs ← library crate:核心邏輯、模組定義
在 main.rs:
use my_project::core::hello;
fn main() {
hello();
}
在 lib.rs:
pub mod core;
模組可以放在檔案或資料夾:
src/
├── lib.rs
└── core/
├── mod.rs ← 宣告模組
├── foo.rs
└── bar.rs
core/mod.rs:
pub mod foo;
pub mod bar;
core/foo.rs:
pub fn say_foo() {
println!("This is foo!");
}
lib.rs 會這樣寫:
pub mod core;
Rust 支援在 src/bin/ 下放多個執行檔:
src/
├── main.rs
├── lib.rs
└── bin/
├── server.rs
└── client.rs
你可以使用:
cargo run --bin server
cargo run --bin client
當需要更明確分工(例如一個前端、一個核心庫、一個 CLI 工具),可以建立 Workspace。
mkdir my_project
cd my_project
cargo new core_lib --lib
cargo new cli_tool --bin
# 建立 Cargo.toml (workspace)
my_project/Cargo.toml:
[workspace]
members = ["core_lib", "cli_tool"]
在 cli_tool/Cargo.toml:
[dependencies]
core_lib = { path = "../core_lib" }
然後就可以在 cli_tool 中使用 core_lib 了。